home *** CD-ROM | disk | FTP | other *** search
- *cX Curso de Programación orientada a objetos
-
- *cB Los primeros ejercicios
- *cR
- En este número no veremos cosas nuevas, nos
- limitaremos a asentar lo aprendido en ante-
- riores entregas. Por ello teneis en el di-
- recctorio "OOP" todos los fuentes que comen-
- taré más adelante.
- Trataremos de hacer un pequeño programa en
- C++ que sirva para hacer juegos de *cLROL*cR con
- versacionales (al estilo *cLMUD*cR, sin gráficos ni
- complicaciones). Lo que haremos, será un
- juego en principio que, número tras número,
- le hiremos añadiendo cosas para acabar te
- niendo un kernel para diseñar juegos conver-
- sacionales.
- Comenzaremos este proyecto como cualquier
- otro, es decir, escribiendo en lápiz y papel
- lo que queremos hacer, como lo vamos ha
- hacer, etc. Esto no lo haré yo aquí, pero es
- recomendable que lo hagais vosotros para ver-
- lo que hace falta (ya os lo mostraré cuando
- llegué el número de las notaciones orientadas
- a objetos, técnica Bosch, etc).
- *i'
- *cB El juego
- *cR
- El objetivo serà crear un programa (juego)
- interactivo con el usuario que acepte unos
- cuantos comandos (por ahora no muchos) y cuya
- base parezca lo que acostrumbramos a llamar
- juego conversacional. Estan claros algunos de
- los elementos que contendrá: mostruos, obje-
- tos, armas, habitaciones, etc.
- En esta primera toma de contacto, nos
- conformaremos con poder definir unos cuantos
- objetos y habitaciones, más adelante iremos
- ampliando el juego y con ello descubriremos
- la potencia de C++ a la hora de reutilizar el
- código. Por ejemplo, definiremos un objeto,
- pero un arma no es más que otro objeto, así
- que la heredaremos y nos ahorraremos escribir
- mucho código.
- En el directorio *cTOOP*cR encontrareis tres
- ficheros *cC.CPP*cR y otros 2 *cC.HPP*cR, que son todos
- los que tiene el juego por ahora. Los fiche-
- ros *cC.HPP*cR son definiciones de clase, en con
- creto, de las clases *c1 "objeto" *cR y *c1"room"*cR.
- Los *cC.CPP*cR son las implementaciones de dichas
- clases. *i(
-
- *cB La clase 'objeto'
- *cR
- En la própia definición de la clase podemos
- ver algunos rasgos característicos de C++.
- Por ejemplo, cuando incluimos en nuestros
- programas C++ ficheros que provenian de C
- (como en este caso *c2"stdio.h"*cR) tenemos que
- hacerlo preponiendo la palabra clave
- *c3"extern"*cR. Otra característica, común a todos
- los lenguajes POO, es que las variables de
- cada clase estan en la parte privada, mien-
- tras las funciones lo estan en la pública o
- privada indiferentemente. No es que no se
- pueda, sino que no se debe por varias cosas
- que ya hemos comentado en anteriores números.
- Tenemos una cosita interesante en la defi-
- nición de las funciones: la función
- *c4"es_nombre()"*cR, aunque no lo parezca, es una
- función 'inline'. Digo que no lo parece, más
- que nada, porque no lleva la palabra reserva
- da *c5'inline'*cR delante, pero la verdad es que
- todas las funciones que se implementan en la
- própia definición de la clase, son por defec-
- to funciones "en línea".
- Ya en la implementación de la clase *c1'obje-
- to'*cR, podemos ver la inclusión del fichero de
- definición, cosa que debemos hacer siempre ya
- que si no el compilador no sabe donde estan
- definidas las funciones que estamos implemen-
- tando. Todas las funciones son muy sencillas
- en sí, pero cabe destacar la función
- *c4"es_un()"*cR que indica si la cadena de caràcte-
- res que se le pasa es igual al nombre del
- objeto. *i)
-
- *cB La clase 'room'
- *cR
- Esta clase define las habitaciones; contie-
- ne una descripción, punteros a las habitacio-
- nes a las que puede acceder (norte, este, sur
- y oeste) y un array con los objetos que hay
- en la própia habitación. Tambien se definen
- unas costantes que se usaran en las llamadas
- a funciones para indicar movimientos entre
- habitaciones.
- En la implementación podemos ver las fun
- ciones implementadas. La función
- *c4"describe()"*cR, a parte de escribir la descrip
- ción de la habitación, escribe todos los
- objetos que se ven. Las funciones
- *c4"coge_obj()"*cR y*c4 "deja_obj()"*cR lo que hacen es
- eso, coger y dejar objetos en la habitación,
- devolviendo en el primer caso un puntero a un
- *c5'objeto' *cRsi existe ese objeto en la sala, y
- en el segundo caso introduciendo el objeto en
- el array de la habitación. *i*
-
- *cB El módulo principal
- *cR
- Como todavia no hemos hecho más que comen-
- zar, las habitaciones y objetos estan defini-
- dos en el própio programa principal. Como
- podeis observar, en C++ se pueden definir
- variables en cualquier lugar del código (en
- este caso ha sido muy utilizado en el
- *c5'main'*cR).
- Luego hay un bucle*c5 'for' *cR infinito que
- terminará cuando se introduzca el comando
- *c6"quit"*cR mediante un*c5 'exit'*cR. Se usa ahora (en
- el próximo número ya cambiará) variables
- globales para llevar todos los datos como en
- que sala se está, que se lleva encima, etc.
- Viendo el código podriais preguntaros
- ¿porqué unas veces se accede a las funciones
- de las clases con un punto y otras con una
- flechita? No se si me explico, por ejemplo:
- *c7
- habitacion1.describe();
- habitacion2->describe();
- *cR
- La primera llamada se realiza cuando *c4'habita-
- cion1' *cRes un objeto, es decir, una instancia
- de una clase própiamente dicho; mientras la
- segunda llamada se hace cuando *c4'habitacion2'*cR
- es un puntero a un objeto. Más claro, esas
- llamadas se harian cuando las habitaciones
- hubieran sido definidas de la siguiente
- forma: *i,
- *c7
- Room habitacion1;
- Room *habitacion2;
- *cR
- Pues ya está todo este número, sólo queda
- compilar el ejemplo. Yo lo hize en Turbo
- C/C++ v2.0 y para ello creé un proyecto que
- tambien se incluye. En el próximo número
- veremos más características del C++ que nos
- ayudaran en la programación de este tipo de
- juegos. Algunas de estas características
- seran la reutilización de código (mediante
- herencia), mejora en el manejo de cadenas
- (con sobrecarga de operadores), etc. A parte,
- tambien se limaran algunas asperezas como la
- pérdida de memória (que a veces se convierte
- en falta de ella) al tener guardados los
- objetos en arrays limitados en tamaño (usare-
- mos listas).
-
- *cM *i+ Navi Dj.
-